注意:在使用此章节时如果是处于开机大程序是自启动时,需要先关闭大程序,建议采用永久关闭自动启动大程序的服务和停止掉大程序,并重启小车,后面需要启动和自启动大程序时候再重新开启大程序和自启动。
如需永久关闭开机自启的APP大程序的功能执行如下命令:
sudo systemctl disable jetbotmini_start
如需永久打开开机自启的APP大程序的功能执行如下命令:
xxxxxxxxxx
sudo systemctl enable jetbotmini_start
如不通过重启Jetbotmini来重启APP大程序的功能执行如下命令:
xxxxxxxxxx
sudo systemctl stop jetbotmini_start
sudo systemctl start jetbotmini_start
由下图所示是Jetbotmini使用的主控Jetsonnano上GPIO口组,是不是看到这些接口的顺序,玩过树莓派的朋友应该就会有似曾相识的感觉,没错他的GPIO口是和Raspberry Pi的接口是一样的,他的驱动文件和其使用方法都与RaspberryPi的GPIO口使用方法类似,玩过RaspberryPI的朋友编程操作他的IO口那就没什么难度了哈,但是没有玩过的也不用太担心,没关系,为了照顾没有基础的一些朋友,我还是会在下面啰嗦几句,介绍他的玩法哈~
但是当我们编程时一般使用的BCM编码号,所以我把他们的BCM编号图给大家贴出来,方便大家编程时查询:
看完Jetsonnano的GPIO结构后,然后我再跟大家介绍在我们Jetbotmini扩展板使用到的接口引脚图,由Jetbotmini 扩展板接口图我们把相对应用到的引脚一一例出来如下:
引脚BCM编码号 | 功能 | 对应外设 |
---|---|---|
1、0 | I2C1总线SCL、SDA | OLED |
3、2 | I2C2总线SCL、SDA | 协处理器 |
24、23 | LED2、LED3 | 板载指示灯 |
8 | KEY | 按键 |
看过上面的介绍,现在我们应该能对使用到的GPIO口和其对应的相应功能有所了解了,我们下面来试着一一使用它们!
如果你不是使用的Yahboom官方提供的Jetbotmini出厂镜像的话,请确认是否在使用GPIO之前根据 3.4.1 启用使用到的外设权限 这一小节中的操作开启了相关使用权限。
由于在上面跟大家说过,Jetson nano的GPIO口结构和树莓派GPIO口 的驱动是可以共用的,在Jetson nano的GPIO驱动里面定义被调用的名字为RPi.GPIO或者Jetson.GPIO,当我们调用Jetsbot的GPIO口用RPi.GPIO或者Jetson.GPIO都可以成功的调用到GPIO驱动。
xxxxxxxxxx
import RPi.GPIO as GPIO
import time
# 引脚定义
LED2GREEN_pin = 24 # BOARD pin 12, BCM pin 18
def main():
# Pin Setup:
# Board pin-numbering scheme
GPIO.setmode(GPIO.BCM)
# 将引脚设置为输出引脚,初始状态可选为高
GPIO.setup(LED2GREEN_pin, GPIO.OUT, initial=GPIO.HIGH)
print("Starting demo now!")
curr_value = GPIO.HIGH
try:
while True:
# 每隔0.25秒钟翻转一次输出
time.sleep(0.25)
print("Outputting {} to pin {}".format(curr_value, LED2GREEN_pin))
GPIO.output(LED2GREEN_pin, curr_value)
curr_value ^= GPIO.HIGH
finally:
GPIO.cleanup()
if __name__ == '__main__':
main()
我们可以看到使用GPIO口点亮LED灯的大致步骤为
1. 设置GPIO口模式
2. 设置GPIO输出模式/输入模式
3. 设置GPIO口初始电平
由原理图可知,GPIO口低电平导通点亮LED灯,执行完上述代码后,我们可以看到绿色的板载LED指示灯会以每秒翻转4次也是闪烁2次的速度显示。
相应具体完整源代码位于/home/jetson/Notebooks/中文/3.GPIO的使用/1.点亮板载LED指示灯/点亮板载绿色LED指示灯.ipynb
其中点【亮板载蓝色LED指示灯】的代码除了驱动的GPIO口不一样外,其他都一致,这里就不啰嗦重复了,有时间的可以都去试着跑一下看看现象。
上面我们已经使用了了GPIO口操作了板载LED指示灯,而Jetbotmini上的按键的使用唯一与之不同的是GPIO设置为输入模式,当然设置为输入模式了的话也就没有设置起始点平这一说法了。下面我们来看到源码实现过程:
xxxxxxxxxx
import RPi.GPIO as GPIO
import time
# Pin Definitons:
led_pin = 24 # BOARD pin 24 绿色
but_pin = 8 # BOARD pin 8 key1
def main():
prev_value = None
# Pin Setup:
GPIO.setmode(GPIO.BCM) # BCM
GPIO.setup(led_pin, GPIO.OUT) # LED pin set as output
GPIO.setup(but_pin, GPIO.IN) # Button pin set as input
# Initial state for LEDs:
GPIO.output(led_pin, GPIO.LOW)
print("Starting demo now!")
try:
while True:
curr_value = GPIO.input(but_pin)
if curr_value != prev_value:
GPIO.output(led_pin, not curr_value)
prev_value = curr_value
print("Outputting {} to Pin {}".format(curr_value, led_pin))
# time.sleep(0.5)
finally:
GPIO.cleanup() # cleanup all GPIO
if __name__ == '__main__':
main()
这里我们监控按键事件时用我们刚刚学过的LED来做提示,用板载绿色LED的状态指示按键的状态,当按下按键时,绿色的LED指示灯被熄灭,松开按下的按键时,绿色指示灯被点亮,当按键事件发生时,在按下按键和松开按键的时刻都会把当前改变成的状态打印在单元格下方显示出来。并会在下方。
相应具体完整源代码位于/home/jetson/Notebooks/中文/3.GPIO的使用/2.按键的使用/按键的使用.ipynb